SpringCloud 入门笔记(五)Hystrix断路器

概述

微服务架构的系统中通常会包含很多个服务,服务间采用HTTP通信,当某个微服务不可用时,很容易导致级联故障,即雪崩效应,因此在服务间进行调用时,需要一定的容错机制,Hystrix就是一个实现了调用超时和断路器的容错组件。

Feign中已经集成了Hystrix,本篇以user-ms为例,添加对role-ms调用的熔断处理。

Hystrix配置

修改user-ms配置文件,添加如下配置,启用feign下的hystrix:

1
2
3
feign:
hystrix:
enabled: true

添加回退处理

创建一个熔断后退处理类,其需要实现feign接口,如下所示:

1
2
3
4
5
6
7
@Component
public class RoleFeignClientFallback implements RoleFeignClient {
@Override
public Object findRoleList() {
return "findRoleList : inavailable";
}
}

修改FeignClient接口,添加fallback配置,如下所示:

1
2
3
4
5
6
7
@FeignClient(name = "role-ms", fallback = RoleFeignClientFallback.class)
public interface RoleFeignClient {

@RequestMapping(value = {"/roles"}, method = RequestMethod.GET)
Object findRoleList();

}

至此,熔断回退处理就添加完成了,在不启动role-ms(role-ms崩溃)的情况下,user-ms调用role-ms服务,则会返回Fallback类中的数据。

检查回退原因

创建一个熔断后退处理工厂类,其需要实现FallbackFactory接口,如下所示:

1
2
3
4
5
6
7
8
@Component
public class RoleFeignClientFallbackFactory implements FallbackFactory<RoleFeignClient> {
@Override
public RoleFeignClient create(Throwable throwable) {
RoleFeignClient roleFeignClient = () -> throwable.getMessage();
return roleFeignClient;
}
}

修改FeignClient接口,添加fallbackFactory配置,如下所示:

1
2
3
4
5
6
7
@FeignClient(name = "role-ms", fallbackFactory = RoleFeignClientFallbackFactory.class)
public interface RoleFeignClient {

@RequestMapping(value = {"/roles"}, method = RequestMethod.GET)
Object findRoleList();

}

在不启动role-ms(role-ms崩溃)的情况下,user-ms调用role-ms服务,则会返回 com.netflix.client.ClientException: Load balancer does not have available server for client: role-ms,这样使用FallbackFactory可以更灵活的控制返回数据。

注意:当fallback和fallbackFactory同时配置时,会优先使用fallback。

本篇的配置和测试都比较简单,这里就不贴测试结果了。

源码地址:https://github.com/GreedyStar/yogurt

最后的最后,安利一下自己写的一个Java代码生成工具,能够方便的生成Spring、SpringMVC、Mybatis架构下的Java代码,希望能对大家有所帮助,地址:Java代码生成器:Generator